vue0.11.9源码 src_api_global.js

Last Updated:

2022-12-30

var mergeOptions = require('../util/merge-option')

分析mergeOptions逻辑,参见post: vue0.11.9源码 src_util_merge-option.js

nextTick 逻辑

#L9

最终源码是在src/util/env.js#L30

先是一个“立即执行函数”

exports.nextTick = (function(){ ... return function trueFunc() {} })()

函数的核心逻辑就是。如果有MutationObserver就使用它,没有的话就使用setTimeout

MutationObserver的回调是一个微任务 JavaScript执行机制-读文笔记

setTimeout 回调是一个宏任务

MutationObserver另见: JavaScript 工作原理之十-使用 MutationObserver 监测 DOM 变化

核心代码段:

  if (typeof MutationObserver !== 'undefined') {
    var counter = 1
    var observer = new MutationObserver(handle)
    var textNode = document.createTextNode(counter)
    observer.observe(textNode, {
      characterData: true
    })
    timerFunc = function () {
      counter = (counter + 1) % 2 // TBC: 为何要取奇偶性,为何不直接 counter++ 或者 counter += 1 ? 目前我个人认为是没有区别
      textNode.data = counter
    }
  }

compiler相关逻辑

vue0.11.9源码 src_compiler_transclude.js